package logger

import (
	"io"
	"os"
	"sync"

	"github.com/sirupsen/logrus"
	"gopkg.in/natefinch/lumberjack.v2"
)

var (
	loggerInstance *logrus.Logger
	once           sync.Once
)

func GetInstance() *logrus.Logger {
	once.Do(func() {
		loggerInstance = logrus.New()
		// json 格式输出
		loggerInstance.Formatter = &logrus.JSONFormatter{
			// TimestampFormat: time.RFC3339Nano,
			TimestampFormat: "2006-01-02 15:04:05.000",
		}
		// 同时输出到文件
		//
		// 日志等级
		// 设置日志级别
		loggerInstance.SetLevel(logrus.InfoLevel)
		// 配置 lumberjack 日志切割器
		lumberJackLogger := &lumberjack.Logger{
			Filename:   "./logs/app.log", // 日志文件的位置
			MaxSize:    50,               // 最大文件大小，单位MB
			MaxBackups: 5,                // 保留旧文件的最大个数
			MaxAge:     7,                // 保留旧文件的最大天数
			Compress:   true,             // 是否压缩/归档旧文件
		}
		// 同时输出到控制台和文件
		loggerInstance.Out = io.MultiWriter(os.Stdout, lumberJackLogger)
	})
	return loggerInstance
}

/*
func main() {
    logger := GetLogger()
    logger.Info("This is an info message")
    logger.Error("This is an error message")
}
*/
